package org.example.springbook.mapper;

import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;
import org.example.springbook.model.BookInfo;

import java.util.List;

@Mapper
public interface BookInfoMapper {

    // 内部的参数需不需要一个对象呢?
    // 内部的代码可以自己玩 改动较小 可以用对象 也可以用参数
    // BookController中使用对象是因为BookController是和外界交互的

    /**
     * 获取当前页的信息
     * @param offset
     * @param pageSize
     * @return
     */
    @Select("select * from book_info where status != 0 " +
            " order by id  limit #{offset}, #{pageSize};")
    List<BookInfo> selectBookInfoByPage(Integer offset, Integer pageSize);

    @Select("select count(1) from book_info")
    Integer count();

    @Insert("insert into book_info (book_name, author, count, price, publish, status)" +
            "values (#{bookName}, #{author}, #{count}, #{price}, #{publish}, #{status})")
    Integer insertBook(BookInfo bookInfo);

    @Select("select * from book_info where id = #{id}")
    BookInfo queryBookInfoById(Integer id);

    // 这里为了后续的删除操作 采用的是逻辑删除 就不使用注解的方式了 而是用XML的方式
    // 在这里 目前我是不知道怎么用注解写的

    // 初学者学习地时候使用动态SQL 使用XML的方式 写错了会有报错提示
    // 而使用注解的方式则不容易看出错误
    Integer updateBook(BookInfo bookInfo);

    Integer batchDelete(List<Integer> ids);
}
